\chapter{软件测试}

软件测试在工程软件开发中至关重要，如果程序错误导致用户获取到了错误的信息，可能在实际实验中造成巨大的损失。一个合格的软件应该通过了一系列的精心设计的测试。开发过程中的测试也辅助开发人员检查漏洞，特别是在大型软件开发时，一个微小的改动可能在程序其他部分引起意想不到的影响，此时便需要进行预先设计的各项测试，以尽早发现这类错误，这种测试方法也被称为回归测试。测试和调试也不相同，调试是在已知存在错误的情况下找到并解决错误，而测试是为了发现错误，并为调试指明方向。

本文对开发的程序进行了三项测试，分别是单元测试、集成测试和性能测试。

\section{单元测试}
单元测试中的单元是指的最小的可以进行测试的结构，如在C语言中一般是一个函数，而在C++中一般是指一个类。单元测试关注内部逻辑和数据结构，在设计单元测试时也会以内部逻辑和数据结构为标准进行。

本文使用了Google Test开源框架，它可以用于设计执行C/C++的单元测试，并且提供了测试结果的分析。Google Test还可以集成到Visual Studio上，可以方便地管理和执行单元测试。

本文分别为IO模块、View模块、Filter模块、Context模块和VTK的一些模块设计了单元测试。

\subsection{IO模块测试}
对IO模块的测试主要是确认其读取的数据是否正确。因此，我们首先获取到测试文件里的正确数据，然后通过IO模块读取测试文件，将读取得到的数据和正确数据进行比对，如果没有错误则测试通过。
\subsection{Filter模块测试}
对Filter模块的测试主要是各个后处理类是否能正确进行后处理，其结果难以量化，所以通过可视化的方式展现，进行人为判断。对每个后处理类，输入测试数据，并使用VTK的窗口管理可视化出来（不依赖Visualization模块）。
\subsection{Context模块测试}
对Context模块的测试主要是绘制结果是否正确，以及各项参数设置是否效果正确，包括多图表的绘制、线段类型设置、端点类型设置、数据变换和图表自适应功能。最终效果依旧不易量化，需要人工验证。
\subsection{View模块测试}
对View模块的测试主要是检查其对场景的控制是否正常。包括了物体的创建和移除、渲染器的相关设置（如背景色）、相机的设置（相机位置、视线方向）以及交互器的设置。

\subsection{VTK模块测试}
对VTK模块的测试是为了验证技术的可行性，以及检查VTK本身是否存在程序漏洞，以便之后决定VTK是否可靠。这里对VtkActor、VtkWidget\textcolor{red}{还未完成...}...

\section{集成测试}
可视化和后处理流程的测试较难量化，大部分测试不能完成自动化完成，这类测试使用人工方法测试，测试的方法以用例的形式展示，而可以自动化的测试依旧使用Google Test完成。
\subsection{可视化渲染}
可视化渲染测试的目的是测试各项可视化功能能否使用，渲染是否正确。
\begin{enumerate}
    \item 打开软件。
    \item 读取一个文件。
    \item 取消所有可视化和后处理选项，使场景中没有需要渲染的物体。
    \item 依次勾选可视化选项，观察效果是否正确，打开参数设置，依次尝试设置并观察新的渲染效果是否符合设置，然后关闭该可视化选项，对下一个可视化选项重复同样的操作。
    \item 检查完全部可视化选项后，检查常用可视化组合是否正确。如一个或多个点渲染或线渲染（散点、网格、边缘、等值线、流线）和一个面渲染（面、等势面）的组合。观察物体的遮挡关系是否正确。
    \item 测试完毕。
\end{enumerate}

\subsection{可视化交互}
可视化交互测试的目的是测试跟踪球、摇杆和平移三种交互器是否正常工作，对于三种交互器需要根据其设计进行对应的测试。
\begin{enumerate}
    \item 打开软件。
    \item 读取一个文件。
    \item 勾选“面”可视化选项，取消所有其他的可视化选项。
    \item 对于跟踪球交互器，测试左键拖拽是否能够旋转视角，滚轮和鼠标右键拖拽是否可以缩放，中键拖拽是否可以平移视角。
    \item 对于摇杆交互器，测试左键拖拽是否能够根据距离旋转视角，鼠标右键拖拽是否可以根据距离缩放，滚轮是否可以缩放，以及中键拖拽是否可以根据距离平移视角。
    \item 对于平移交互器，测试左键拖拽是否能够平移视角。
    \item 测试完毕。
\end{enumerate}

\subsubsection{采点}
\textcolor{red}{采点还存在问题...完成后再写}

\subsection{后处理}
与可视化类似，后处理的正确性也可以通过渲染结果进行判断。
\begin{enumerate}
    \item 打开软件。
    \item 读取一个文件。
    \item 取消所有可视化和后处理选项，使场景中没有需要渲染的物体。
    \item 依次勾选后处理选项，观察效果是否正确，打开参数设置，依次尝试设置并观察新的渲染效果是否符合设置，然后关闭该后处理选项，对下一个可视化选项重复同样的操作。
    \item 测试完毕。
\end{enumerate}

\section{性能测试}
属于系统测试的一部分，因为后处理可视化对性能要求很高，所以需要重视。对后处理可视化的性能评估主要在三个指标上：IO速度、渲染帧率以及后处理速度。
\textcolor{red}{还未完成...需要软件完善后进行...}